{
 "nbformat": 4,
 "nbformat_minor": 2,
 "metadata": {
  "language_info": {
   "name": "python",
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "version": "3.8.2-final"
  },
  "orig_nbformat": 2,
  "file_extension": ".py",
  "mimetype": "text/x-python",
  "name": "python",
  "npconvert_exporter": "python",
  "pygments_lexer": "ipython3",
  "version": 3,
  "kernelspec": {
   "name": "python38264bit2936e46e84a5494585e7cd6cd6f19a38",
   "display_name": "Python 3.8.2 64-bit"
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果连续数字之间的差严格地在正数和负数之间交替，则数字序列称为摆动序列。第一个差（如果存在的话）可能是正数或负数。少于两个元素的序列也是摆动序列。\n",
    "\n",
    "例如， [1,7,4,9,2,5] 是一个摆动序列，因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列，第一个序列是因为它的前两个差值都是正数，第二个序列是因为它的最后一个差值为零。\n",
    "\n",
    "给定一个整数序列，返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些（也可以不删除）元素来获得子序列，剩下的元素保持其原始顺序。\n",
    "\n",
    "示例 1:\n",
    "\n",
    "输入: [1,7,4,9,2,5]\n",
    "输出: 6 \n",
    "解释: 整个序列均为摆动序列。\n",
    "示例 2:\n",
    "\n",
    "输入: [1,17,5,10,13,15,10,5,16,8]\n",
    "输出: 7\n",
    "解释: 这个序列包含几个长度为 7 摆动序列，其中一个可为[1,17,10,13,10,16,8]。\n",
    "示例 3:\n",
    "\n",
    "输入: [1,2,3,4,5,6,7,8,9]\n",
    "输出: 2\n",
    "\n",
    "来源：力扣（LeetCode）\n",
    "链接：https://leetcode-cn.com/problems/wiggle-subsequence\n",
    "著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x7fe2107360d0>]"
     },
     "metadata": {},
     "execution_count": 2
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"248.518125pt\" version=\"1.1\" viewBox=\"0 0 368.925 248.518125\" width=\"368.925pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n  <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n  </style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M -0 248.518125 \nL 368.925 248.518125 \nL 368.925 0 \nL -0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 26.925 224.64 \nL 361.725 224.64 \nL 361.725 7.2 \nL 26.925 7.2 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mcbcc8bd6f2\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"42.143182\" xlink:href=\"#mcbcc8bd6f2\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 0 -->\n      <defs>\n       <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n      </defs>\n      <g transform=\"translate(38.961932 239.238437)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"109.779545\" xlink:href=\"#mcbcc8bd6f2\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 2 -->\n      <defs>\n       <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n      </defs>\n      <g transform=\"translate(106.598295 239.238437)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"177.415909\" xlink:href=\"#mcbcc8bd6f2\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 4 -->\n      <defs>\n       <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n      </defs>\n      <g transform=\"translate(174.234659 239.238437)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"245.052273\" xlink:href=\"#mcbcc8bd6f2\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 6 -->\n      <defs>\n       <path d=\"M 33.015625 40.375 \nQ 26.375 40.375 22.484375 35.828125 \nQ 18.609375 31.296875 18.609375 23.390625 \nQ 18.609375 15.53125 22.484375 10.953125 \nQ 26.375 6.390625 33.015625 6.390625 \nQ 39.65625 6.390625 43.53125 10.953125 \nQ 47.40625 15.53125 47.40625 23.390625 \nQ 47.40625 31.296875 43.53125 35.828125 \nQ 39.65625 40.375 33.015625 40.375 \nz\nM 52.59375 71.296875 \nL 52.59375 62.3125 \nQ 48.875 64.0625 45.09375 64.984375 \nQ 41.3125 65.921875 37.59375 65.921875 \nQ 27.828125 65.921875 22.671875 59.328125 \nQ 17.53125 52.734375 16.796875 39.40625 \nQ 19.671875 43.65625 24.015625 45.921875 \nQ 28.375 48.1875 33.59375 48.1875 \nQ 44.578125 48.1875 50.953125 41.515625 \nQ 57.328125 34.859375 57.328125 23.390625 \nQ 57.328125 12.15625 50.6875 5.359375 \nQ 44.046875 -1.421875 33.015625 -1.421875 \nQ 20.359375 -1.421875 13.671875 8.265625 \nQ 6.984375 17.96875 6.984375 36.375 \nQ 6.984375 53.65625 15.1875 63.9375 \nQ 23.390625 74.21875 37.203125 74.21875 \nQ 40.921875 74.21875 44.703125 73.484375 \nQ 48.484375 72.75 52.59375 71.296875 \nz\n\" id=\"DejaVuSans-54\"/>\n      </defs>\n      <g transform=\"translate(241.871023 239.238437)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-54\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"312.688636\" xlink:href=\"#mcbcc8bd6f2\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 8 -->\n      <defs>\n       <path d=\"M 31.78125 34.625 \nQ 24.75 34.625 20.71875 30.859375 \nQ 16.703125 27.09375 16.703125 20.515625 \nQ 16.703125 13.921875 20.71875 10.15625 \nQ 24.75 6.390625 31.78125 6.390625 \nQ 38.8125 6.390625 42.859375 10.171875 \nQ 46.921875 13.96875 46.921875 20.515625 \nQ 46.921875 27.09375 42.890625 30.859375 \nQ 38.875 34.625 31.78125 34.625 \nz\nM 21.921875 38.8125 \nQ 15.578125 40.375 12.03125 44.71875 \nQ 8.5 49.078125 8.5 55.328125 \nQ 8.5 64.0625 14.71875 69.140625 \nQ 20.953125 74.21875 31.78125 74.21875 \nQ 42.671875 74.21875 48.875 69.140625 \nQ 55.078125 64.0625 55.078125 55.328125 \nQ 55.078125 49.078125 51.53125 44.71875 \nQ 48 40.375 41.703125 38.8125 \nQ 48.828125 37.15625 52.796875 32.3125 \nQ 56.78125 27.484375 56.78125 20.515625 \nQ 56.78125 9.90625 50.3125 4.234375 \nQ 43.84375 -1.421875 31.78125 -1.421875 \nQ 19.734375 -1.421875 13.25 4.234375 \nQ 6.78125 9.90625 6.78125 20.515625 \nQ 6.78125 27.484375 10.78125 32.3125 \nQ 14.796875 37.15625 21.921875 38.8125 \nz\nM 18.3125 54.390625 \nQ 18.3125 48.734375 21.84375 45.5625 \nQ 25.390625 42.390625 31.78125 42.390625 \nQ 38.140625 42.390625 41.71875 45.5625 \nQ 45.3125 48.734375 45.3125 54.390625 \nQ 45.3125 60.0625 41.71875 63.234375 \nQ 38.140625 66.40625 31.78125 66.40625 \nQ 25.390625 66.40625 21.84375 63.234375 \nQ 18.3125 60.0625 18.3125 54.390625 \nz\n\" id=\"DejaVuSans-56\"/>\n      </defs>\n      <g transform=\"translate(309.507386 239.238437)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-56\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_6\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"ma012e77429\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"202.401818\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 2 -->\n      <g transform=\"translate(13.5625 206.201037)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_7\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"177.692727\"/>\n      </g>\n     </g>\n     <g id=\"text_7\">\n      <!-- 4 -->\n      <g transform=\"translate(13.5625 181.491946)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_8\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"152.983636\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 6 -->\n      <g transform=\"translate(13.5625 156.782855)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-54\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"128.274545\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 8 -->\n      <g transform=\"translate(13.5625 132.073764)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-56\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"103.565455\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 10 -->\n      <defs>\n       <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n      </defs>\n      <g transform=\"translate(7.2 107.364673)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_6\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"78.856364\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 12 -->\n      <g transform=\"translate(7.2 82.655582)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_7\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"54.147273\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 14 -->\n      <g transform=\"translate(7.2 57.946491)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_8\">\n     <g id=\"line2d_13\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#ma012e77429\" y=\"29.438182\"/>\n      </g>\n     </g>\n     <g id=\"text_13\">\n      <!-- 16 -->\n      <g transform=\"translate(7.2 33.237401)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-54\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"line2d_14\">\n    <path clip-path=\"url(#p689e0ff94e)\" d=\"M 42.143182 214.756364 \nL 75.961364 17.083636 \nL 109.779545 165.338182 \nL 143.597727 103.565455 \nL 177.415909 66.501818 \nL 211.234091 41.792727 \nL 245.052273 103.565455 \nL 278.870455 165.338182 \nL 312.688636 29.438182 \nL 346.506818 128.274545 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path d=\"M 26.925 224.64 \nL 26.925 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path d=\"M 361.725 224.64 \nL 361.725 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path d=\"M 26.925 224.64 \nL 361.725 224.64 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path d=\"M 26.925 7.2 \nL 361.725 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p689e0ff94e\">\n   <rect height=\"217.44\" width=\"334.8\" x=\"26.925\" y=\"7.2\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "a = [1,17,5,10,13,15,10,5,16,8]\n",
    "\n",
    "%matplotlib inline \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "plt.plot(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "只能想到动态规划的解法复杂度 为$O(n^2)$\n",
    "\n",
    "但是题目说有 $O(n)$ 的解法\n",
    "\n",
    "看了一下大佬们的答案\n",
    "\n",
    "然后画了上面的那个图，可以很明显的看出来，应该怎么算： 有一个高点+1，有一个低点+1\n",
    "\n",
    "然后怎么写呢"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "from typing import List\n",
    "class Solution:\n",
    "    def wiggleMaxLength(self, nums: List[int]) -> int:\n",
    "        high = 1\n",
    "        low = 1\n",
    "        # 真的很巧妙啊，想不到想不到\n",
    "        for i in range(1, len(nums)):\n",
    "            if nums[i] < nums[i-1]:\n",
    "                low = high + 1\n",
    "            if nums[i] > nums[i-1]:\n",
    "                high = low + 1\n",
    "            print(nums[i],high, low)\n",
    "        return max(high, low)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "17 2 1\n5 2 3\n10 4 3\n13 4 3\n15 4 3\n10 4 5\n5 4 5\n16 6 5\n8 6 7\n"
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "True"
     },
     "metadata": {},
     "execution_count": 20
    }
   ],
   "source": [
    "Solution().wiggleMaxLength([1,17,5,10,13,15,10,5,16,8]) == 7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "2 2 1\n3 2 1\n4 2 1\n5 2 1\n6 2 1\n7 2 1\n"
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "True"
     },
     "metadata": {},
     "execution_count": 22
    }
   ],
   "source": [
    "Solution().wiggleMaxLength([1,2,3,4,5,6,7]) == 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "7 2 1\n4 2 3\n9 4 3\n2 4 5\n5 6 5\n"
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "True"
     },
     "metadata": {},
     "execution_count": 23
    }
   ],
   "source": [
    "Solution().wiggleMaxLength([1,7,4,9,2,5]) == 6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ]
}